Open Bug 516039 Opened 16 years ago Updated 3 years ago

Assertions in nsIFrame::GetUsedPadding() & nsIFrame::GetUsedBorder()

Categories

(Core :: Layout, defect)

x86
Linux
defect

Tracking

()

People

(Reporter: johnjbarton, Unassigned)

References

Details

FF 3.7 debug build from source pulled 10SEP09, with patches Asserts: ###!!! ASSERTION: cannot call GetUsedPadding on a dirty frame not currently bein g reflowed: 'nsLayoutUtils::sDisableGetUsedXAssertions || !NS_SUBTREE_DIRTY(this ) || (GetStateBits() & NS_FRAME_IN_REFLOW)', file g:/mozilla/mozilla-central/src /layout/generic/nsFrame.cpp, line 619 Stack ntdll.dll!_DbgBreakPoint@0() > xpcom_core.dll!Break(const char *) Line 489 C++ xpcom_core.dll!NS_DebugBreak_P(unsigned int, const char *, const char *, const char *, int) Line 354 C++ gklayout.dll!nsIFrame::GetUsedPadding() Line 619 C++ gklayout.dll!nsIFrame::GetUsedBorderAndPadding() Line 815 C++ gklayout.dll!nsLayoutUtils::GetFirstLinePosition(const nsIFrame *, nsLayoutUtils::LinePosition *) Line 2571 C++ gklayout.dll!nsLayoutUtils::GetFirstLinePosition(const nsIFrame *, nsLayoutUtils::LinePosition *) Line 2587 C++ gklayout.dll!nsLayoutUtils::GetFirstLineBaseline(const nsIFrame *, int *) Line 2536 C++ gklayout.dll!nsTableCellFrame::GetCellBaseline() Line 678 C++ gklayout.dll!nsTableRowFrame::ReflowChildren(nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, nsTableFrame &, unsigned int &) Line 959 C++ gklayout.dll!nsTableRowFrame::Reflow(nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, unsigned int &) Line 1071 C++ gklayout.dll!nsContainerFrame::ReflowChild(nsIFrame *, nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, int, int, unsigned int, unsigned int &, nsOverflowContinuationTracker *) Line 791 C++ gklayout.dll!nsTableRowGroupFrame::ReflowChildren(nsPresContext *, nsHTMLReflowMetrics &, nsRowGroupReflowState &, unsigned int &, int *) Line 427 C++ gklayout.dll!nsTableRowGroupFrame::Reflow(nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, unsigned int &) Line 1331 C++ gklayout.dll!nsContainerFrame::ReflowChild(nsIFrame *, nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, int, int, unsigned int, unsigned int &, nsOverflowContinuationTracker *) Line 791 C++ gklayout.dll!nsTableFrame::ReflowChildren(nsTableReflowState &, unsigned int &, nsIFrame * &, nsRect &) Line 2860 C++ gklayout.dll!nsTableFrame::ReflowTable(nsHTMLReflowMetrics &, const nsHTMLReflowState &, int, nsIFrame * &, unsigned int &) Line 1912 C++ gklayout.dll!nsTableFrame::Reflow(nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, unsigned int &) Line 1817 C++ gklayout.dll!nsContainerFrame::ReflowChild(nsIFrame *, nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, int, int, unsigned int, unsigned int &, nsOverflowContinuationTracker *) Line 791 C++ gklayout.dll!nsTableOuterFrame::OuterDoReflowChild(nsPresContext *, nsIFrame *, const nsHTMLReflowState &, nsHTMLReflowMetrics &, unsigned int &) Line 1009 C++ gklayout.dll!nsTableOuterFrame::Reflow(nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, unsigned int &) Line 1150 C++ gklayout.dll!nsBlockReflowContext::ReflowBlock(const nsRect &, int, nsCollapsingMargin &, int, int, nsLineBox *, nsHTMLReflowState &, unsigned int &, nsBlockReflowState &) Line 310 C++ gklayout.dll!nsBlockFrame::ReflowBlockFrame(nsBlockReflowState &, nsLineList_iterator, int *) Line 3072 C++ gklayout.dll!nsBlockFrame::ReflowLine(nsBlockReflowState &, nsLineList_iterator, int *) Line 2348 C++ gklayout.dll!nsBlockFrame::ReflowDirtyLines(nsBlockReflowState &) Line 1874 C++ gklayout.dll!nsBlockFrame::Reflow(nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, unsigned int &) Line 983 C++ gklayout.dll!nsContainerFrame::ReflowChild(nsIFrame *, nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, int, int, unsigned int, unsigned int &, nsOverflowContinuationTracker *) Line 791 C++ gklayout.dll!nsHTMLScrollFrame::ReflowScrolledFrame(ScrollReflowState *, int, int, nsHTMLReflowMetrics *, int) Line 543 C++ gklayout.dll!nsHTMLScrollFrame::ReflowContents(ScrollReflowState *, const nsHTMLReflowMetrics &) Line 637 C++ gklayout.dll!nsHTMLScrollFrame::Reflow(nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, unsigned int &) Line 838 C++ gklayout.dll!nsAbsoluteContainingBlock::ReflowAbsoluteFrame(nsIFrame *, nsPresContext *, const nsHTMLReflowState &, int, int, int, nsIFrame *, unsigned int &, nsRect *) Line 468 C++ gklayout.dll!nsAbsoluteContainingBlock::Reflow(nsContainerFrame *, nsPresContext *, const nsHTMLReflowState &, unsigned int &, int, int, int, int, int, nsRect *) Line 158 C++ gklayout.dll!CanvasFrame::Reflow(nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, unsigned int &) Line 731 C++ gklayout.dll!nsContainerFrame::ReflowChild(nsIFrame *, nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, int, int, unsigned int, unsigned int &, nsOverflowContinuationTracker *) Line 791 C++ gklayout.dll!nsHTMLScrollFrame::ReflowScrolledFrame(ScrollReflowState *, int, int, nsHTMLReflowMetrics *, int) Line 543 C++ gklayout.dll!nsHTMLScrollFrame::ReflowContents(ScrollReflowState *, const nsHTMLReflowMetrics &) Line 637 C++ gklayout.dll!nsHTMLScrollFrame::Reflow(nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, unsigned int &) Line 838 C++ gklayout.dll!nsContainerFrame::ReflowChild(nsIFrame *, nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, int, int, unsigned int, unsigned int &, nsOverflowContinuationTracker *) Line 791 C++ gklayout.dll!ViewportFrame::Reflow(nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, unsigned int &) Line 282 C++ gklayout.dll!PresShell::DoReflow(nsIFrame *, int) Line 7085 C++ gklayout.dll!PresShell::ProcessReflowCommands(int) Line 7205 C++ gklayout.dll!PresShell::FlushPendingNotifications(mozFlushType) Line 4762 C++ gklayout.dll!PresShell::WillPaint() Line 6718 C++ gklayout.dll!nsViewManager::FlushPendingInvalidates() Line 2028 C++ gklayout.dll!nsViewManager::EnableRefresh(unsigned int) Line 1754 C++ gklayout.dll!nsViewManager::EndUpdateViewBatch(unsigned int) Line 1794 C++ gklayout.dll!nsIViewManager::UpdateViewBatch::EndUpdateViewBatch(unsigned int) Line 390 C++ gklayout.dll!nsViewManager::DispatchEvent(nsGUIEvent *, nsIView *, nsEventStatus *) Line 968 C++ gklayout.dll!HandleEvent(nsGUIEvent *) Line 168 C++ gkwidget.dll!nsWindow::DispatchEvent(nsGUIEvent *, nsEventStatus &) Line 2763 C++ gkwidget.dll!nsWindow::DispatchWindowEvent(nsGUIEvent *, nsEventStatus &) Line 2792 C++ gkwidget.dll!nsWindow::OnPaint(HDC__ *) Line 509 C++ gkwidget.dll!nsWindow::ProcessMessage(unsigned int, unsigned int &, long &, long *) Line 3669 C++ gkwidget.dll!nsWindow::WindowProc(HWND__ *, unsigned int, unsigned int, long) Line 3374 C++ user32.dll!_InternalCallWinProc@20() user32.dll!_UserCallWinProcCheckWow@32() user32.dll!_DispatchClientMessage@20() user32.dll!___fnDWORD@4() ntdll.dll!_KiUserCallbackDispatcher@12() user32.dll!_NtUserCallHwndLock@8() gkwidget.dll!nsWindow::DispatchStarvedPaints(HWND__ *, long) Line 2895 C++ user32.dll!_InternalEnumWindows@24() user32.dll!_EnumChildWindows@12() gkwidget.dll!nsWindow::DispatchPendingEvents() Line 2935 C++ gkwidget.dll!nsWindow::ProcessMessage(unsigned int, unsigned int &, long &, long *) Line 3780 C++ gkwidget.dll!nsWindow::WindowProc(HWND__ *, unsigned int, unsigned int, long) Line 3374 C++ user32.dll!_InternalCallWinProc@20() user32.dll!_UserCallWinProcCheckWow@32() user32.dll!_DispatchMessageWorker@8() user32.dll!_DispatchMessageW@4() gkwidget.dll!nsAppShell::ProcessNextNativeEvent(int) Line 166 C++ gkwidget.dll!nsBaseAppShell::DoProcessNextNativeEvent(int) Line 151 C++ gkwidget.dll!nsBaseAppShell::OnProcessNextEvent(nsIThreadInternal *, int, unsigned int) Line 278 C++ xpcom_core.dll!nsThread::ProcessNextEvent(int, int *) Line 510 C++ xpcom_core.dll!NS_ProcessNextEvent_P(nsIThread *, int) Line 230 C++ gkwidget.dll!nsBaseAppShell::Run() Line 170 C++ tkitcmps.dll!nsAppStartup::Run() Line 182 C++ xul.dll!XRE_main(int, char * *, const nsXREAppData *) Line 3479 C++ firefox.exe!NS_internal_main(int, char * *) Line 156 C++ firefox.exe!wmain(int, unsigned short * *) Line 110 C++ firefox.exe!__tmainCRTStartup() Line 583 C firefox.exe!wmainCRTStartup() Line 403 C kernel32.dll!_BaseProcessStart@4()
That assert alternates with this one: ###!!! ASSERTION: cannot call GetUsedBorder on a dirty frame not currently being reflowed: 'nsLayoutUtils::sDisableGetUsedXAssertions || !NS_SUBTREE_DIRTY(this) || (GetStateBits() & NS_FRAME_IN_REFLOW)', file g:/mozilla/mozilla-central/src/ layout/generic/nsFrame.cpp, line 591 ntdll.dll!_DbgBreakPoint@0() > xpcom_core.dll!Break(const char *) Line 489 C++ xpcom_core.dll!NS_DebugBreak_P(unsigned int, const char *, const char *, const char *, int) Line 354 C++ gklayout.dll!nsIFrame::GetUsedBorder() Line 591 C++ gklayout.dll!nsIFrame::GetUsedBorderAndPadding() Line 815 C++ gklayout.dll!nsLayoutUtils::GetFirstLinePosition(const nsIFrame *, nsLayoutUtils::LinePosition *) Line 2571 C++ gklayout.dll!nsLayoutUtils::GetFirstLinePosition(const nsIFrame *, nsLayoutUtils::LinePosition *) Line 2587 C++ gklayout.dll!nsLayoutUtils::GetFirstLineBaseline(const nsIFrame *, int *) Line 2536 C++ gklayout.dll!nsTableCellFrame::GetCellBaseline() Line 678 C++ gklayout.dll!nsTableRowFrame::CalcHeight(const nsHTMLReflowState &) Line 561 C++ gklayout.dll!nsTableRowFrame::ReflowChildren(nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, nsTableFrame &, unsigned int &) Line 1009 C++ gklayout.dll!nsTableRowFrame::Reflow(nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, unsigned int &) Line 1071 C++ gklayout.dll!nsContainerFrame::ReflowChild(nsIFrame *, nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, int, int, unsigned int, unsigned int &, nsOverflowContinuationTracker *) Line 791 C++ gklayout.dll!nsTableRowGroupFrame::ReflowChildren(nsPresContext *, nsHTMLReflowMetrics &, nsRowGroupReflowState &, unsigned int &, int *) Line 427 C++ gklayout.dll!nsTableRowGroupFrame::Reflow(nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, unsigned int &) Line 1331 C++ gklayout.dll!nsContainerFrame::ReflowChild(nsIFrame *, nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, int, int, unsigned int, unsigned int &, nsOverflowContinuationTracker *) Line 791 C++ gklayout.dll!nsTableFrame::ReflowChildren(nsTableReflowState &, unsigned int &, nsIFrame * &, nsRect &) Line 2860 C++ gklayout.dll!nsTableFrame::ReflowTable(nsHTMLReflowMetrics &, const nsHTMLReflowState &, int, nsIFrame * &, unsigned int &) Line 1912 C++ gklayout.dll!nsTableFrame::Reflow(nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, unsigned int &) Line 1817 C++ gklayout.dll!nsContainerFrame::ReflowChild(nsIFrame *, nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, int, int, unsigned int, unsigned int &, nsOverflowContinuationTracker *) Line 791 C++ gklayout.dll!nsTableOuterFrame::OuterDoReflowChild(nsPresContext *, nsIFrame *, const nsHTMLReflowState &, nsHTMLReflowMetrics &, unsigned int &) Line 1009 C++ gklayout.dll!nsTableOuterFrame::Reflow(nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, unsigned int &) Line 1150 C++ gklayout.dll!nsBlockReflowContext::ReflowBlock(const nsRect &, int, nsCollapsingMargin &, int, int, nsLineBox *, nsHTMLReflowState &, unsigned int &, nsBlockReflowState &) Line 310 C++ gklayout.dll!nsBlockFrame::ReflowBlockFrame(nsBlockReflowState &, nsLineList_iterator, int *) Line 3072 C++ gklayout.dll!nsBlockFrame::ReflowLine(nsBlockReflowState &, nsLineList_iterator, int *) Line 2348 C++ gklayout.dll!nsBlockFrame::ReflowDirtyLines(nsBlockReflowState &) Line 1874 C++ gklayout.dll!nsBlockFrame::Reflow(nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, unsigned int &) Line 983 C++ gklayout.dll!nsContainerFrame::ReflowChild(nsIFrame *, nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, int, int, unsigned int, unsigned int &, nsOverflowContinuationTracker *) Line 791 C++ gklayout.dll!nsHTMLScrollFrame::ReflowScrolledFrame(ScrollReflowState *, int, int, nsHTMLReflowMetrics *, int) Line 543 C++ gklayout.dll!nsHTMLScrollFrame::ReflowContents(ScrollReflowState *, const nsHTMLReflowMetrics &) Line 637 C++ gklayout.dll!nsHTMLScrollFrame::Reflow(nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, unsigned int &) Line 838 C++ gklayout.dll!nsAbsoluteContainingBlock::ReflowAbsoluteFrame(nsIFrame *, nsPresContext *, const nsHTMLReflowState &, int, int, int, nsIFrame *, unsigned int &, nsRect *) Line 468 C++ gklayout.dll!nsAbsoluteContainingBlock::Reflow(nsContainerFrame *, nsPresContext *, const nsHTMLReflowState &, unsigned int &, int, int, int, int, int, nsRect *) Line 158 C++ gklayout.dll!CanvasFrame::Reflow(nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, unsigned int &) Line 731 C++ gklayout.dll!nsContainerFrame::ReflowChild(nsIFrame *, nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, int, int, unsigned int, unsigned int &, nsOverflowContinuationTracker *) Line 791 C++ gklayout.dll!nsHTMLScrollFrame::ReflowScrolledFrame(ScrollReflowState *, int, int, nsHTMLReflowMetrics *, int) Line 543 C++ gklayout.dll!nsHTMLScrollFrame::ReflowContents(ScrollReflowState *, const nsHTMLReflowMetrics &) Line 637 C++ gklayout.dll!nsHTMLScrollFrame::Reflow(nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, unsigned int &) Line 838 C++ gklayout.dll!nsContainerFrame::ReflowChild(nsIFrame *, nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, int, int, unsigned int, unsigned int &, nsOverflowContinuationTracker *) Line 791 C++ gklayout.dll!ViewportFrame::Reflow(nsPresContext *, nsHTMLReflowMetrics &, const nsHTMLReflowState &, unsigned int &) Line 282 C++ gklayout.dll!PresShell::DoReflow(nsIFrame *, int) Line 7085 C++ gklayout.dll!PresShell::ProcessReflowCommands(int) Line 7205 C++ gklayout.dll!PresShell::FlushPendingNotifications(mozFlushType) Line 4762 C++ gklayout.dll!PresShell::WillPaint() Line 6718 C++ gklayout.dll!nsViewManager::FlushPendingInvalidates() Line 2028 C++ gklayout.dll!nsViewManager::EnableRefresh(unsigned int) Line 1754 C++ gklayout.dll!nsViewManager::EndUpdateViewBatch(unsigned int) Line 1794 C++ gklayout.dll!nsIViewManager::UpdateViewBatch::EndUpdateViewBatch(unsigned int) Line 390 C++ gklayout.dll!nsViewManager::DispatchEvent(nsGUIEvent *, nsIView *, nsEventStatus *) Line 968 C++ gklayout.dll!HandleEvent(nsGUIEvent *) Line 168 C++ gkwidget.dll!nsWindow::DispatchEvent(nsGUIEvent *, nsEventStatus &) Line 2763 C++ gkwidget.dll!nsWindow::DispatchWindowEvent(nsGUIEvent *, nsEventStatus &) Line 2792 C++ gkwidget.dll!nsWindow::OnPaint(HDC__ *) Line 509 C++ gkwidget.dll!nsWindow::ProcessMessage(unsigned int, unsigned int &, long &, long *) Line 3669 C++ gkwidget.dll!nsWindow::WindowProc(HWND__ *, unsigned int, unsigned int, long) Line 3374 C++ user32.dll!_InternalCallWinProc@20() user32.dll!_UserCallWinProcCheckWow@32() user32.dll!_DispatchClientMessage@20() user32.dll!___fnDWORD@4() ntdll.dll!_KiUserCallbackDispatcher@12() user32.dll!_NtUserCallHwndLock@8() gkwidget.dll!nsWindow::DispatchStarvedPaints(HWND__ *, long) Line 2895 C++ user32.dll!_InternalEnumWindows@24() user32.dll!_EnumChildWindows@12() gkwidget.dll!nsWindow::DispatchPendingEvents() Line 2935 C++ gkwidget.dll!nsWindow::ProcessMessage(unsigned int, unsigned int &, long &, long *) Line 3780 C++ gkwidget.dll!nsWindow::WindowProc(HWND__ *, unsigned int, unsigned int, long) Line 3374 C++ user32.dll!_InternalCallWinProc@20() user32.dll!_UserCallWinProcCheckWow@32() user32.dll!_DispatchMessageWorker@8() user32.dll!_DispatchMessageW@4() gkwidget.dll!nsAppShell::ProcessNextNativeEvent(int) Line 166 C++ gkwidget.dll!nsBaseAppShell::DoProcessNextNativeEvent(int) Line 151 C++ gkwidget.dll!nsBaseAppShell::OnProcessNextEvent(nsIThreadInternal *, int, unsigned int) Line 278 C++ xpcom_core.dll!nsThread::ProcessNextEvent(int, int *) Line 510 C++ xpcom_core.dll!NS_ProcessNextEvent_P(nsIThread *, int) Line 230 C++ gkwidget.dll!nsBaseAppShell::Run() Line 170 C++ tkitcmps.dll!nsAppStartup::Run() Line 182 C++ xul.dll!XRE_main(int, char * *, const nsXREAppData *) Line 3479 C++ firefox.exe!NS_internal_main(int, char * *) Line 156 C++ firefox.exe!wmain(int, unsigned short * *) Line 110 C++ firefox.exe!__tmainCRTStartup() Line 583 C firefox.exe!wmainCRTStartup() Line 403 C kernel32.dll!_BaseProcessStart@4()
Hmm. I wonder whether we're interrupting inside the table cell or something... Need to think about this.
Blocks: ireflow
Component: General → Layout
QA Contact: general → layout
These come in batches when I switch tabs in Chromebug. Might be the Tracing panel; so it might show up in Firebug's tracing window which would make a much easier repro case. I'll check that next week.
Hmm. Are these happening in a _chrome_ document then? In your PresShell::DoReflow, what's the mDocumentURI of the presshell's mDocument?
I guess we interrupt chrome documents in any case, so that shouldn't matter. Still need to look at the code per comment 2.
Severity: normal → S3
You need to log in before you can comment on or make changes to this bug.